// 约束 后台数据需要满足实现MemberEntity接口
import { MemberEntity } from "../model";
// AxiosResponse 类型声明
import Axios, { AxiosResponse } from "axios";

// 前端,沟通经验,接口地址和方法
// 界面需要的数据,格式.前端清楚
// 先使用 fastmock 等工具,mock一下,得到假数据
// 不依赖后端,先把前端功能实现
// url 切换成 后端开发后 真正数据所在的url
// 前后端分离

// baseURL
const githubURL = "https://api.github.com";
const githubMembersUrl = `${githubURL}/orgs/lemoncode/members`

// ts bug 驱动代码
// 返回类型 Promise 接口 <MemberEntity[]>返回参数类型
export const getMembersCollection = (): Promise<MemberEntity[]> => {
    const promise = new Promise<MemberEntity[]>((resolve, reject) => {
        try {
            Axios.get<MemberEntity[]>(githubMembersUrl).then(
                response => resolve(mapMemberListApiToModel(response))
            )
        } catch (e) {
            reject(e)
        }
    })
    return promise;
}

const mapMemberListApiToModel = ({
    data, //数据解构
}: AxiosResponse<MemberEntity[]>): MemberEntity[] =>
    data.map(
        (githubMember) =>
        ({
            id: githubMember.id,
            login: githubMember.login,
            avatar_url: githubMember.avatar_url
        })
    )